import { get, post } from './request';

/**
 * SSE请求处理方法
 * @param {string} type - 请求类型：'GET' 或 'POST'
 * @param {string} url - 请求地址
 * @param {Object} params - 请求参数
 * @param {Function} callback - 回调函数，用于处理每次接收到的数据
 * @returns {Promise} 返回一个Promise对象，用于处理SSE连接
 */
export function sseRequest(type, url, params, callback) {
  return new Promise((resolve, reject) => {
    try {
      // 构建完整的URL，包含查询参数
      const queryString = new URLSearchParams(params).toString();
      const fullUrl = `${url}${queryString ? `?${queryString}` : ''}`;

      // 创建EventSource连接
      const eventSource = new EventSource(fullUrl, {
        withCredentials: false
      });

      // 监听open事件
      eventSource.onopen = () => {
        console.log('SSE连接已建立');
      };

      // 监听message事件
      eventSource.onmessage = (event) => {
        try {
          if (event.data) {
            //const data = JSON.parse(event.data);
            // 调用回调函数，传入数据和是否结束的标记
            callback(event.data, false);
          }
        } catch (error) {
          console.error('SSE数据解析错误:', error);
        }
      };

      // 监听error事件
      eventSource.onerror = (error) => {
        console.error('SSE连接错误:', error);
        // 不立即关闭连接，让重试机制工作
        if (eventSource.readyState === EventSource.CLOSED) {
          eventSource.close();
          reject(new Error('SSE连接已关闭'));
        }
      };

      // 监听自定义的end事件
      eventSource.addEventListener('end', (event) => {
        try {
          if (event.data) {
            const data = JSON.parse(event.data);
            // 最后一次调用回调函数，标记为结束
            callback(data, true);
          }
          eventSource.close();
          resolve();
        } catch (error) {
          console.error('SSE结束数据解析错误:', error);
          eventSource.close();
          reject(error);
        }
      });

      // 返回关闭连接的方法
      return () => {
        if (eventSource.readyState !== EventSource.CLOSED) {
          eventSource.close();
        }
      };
    } catch (error) {
      console.error('SSE请求初始化错误:', error);
      reject(error);
    }
  });
}

// 使用示例：
/*
import { sseRequest } from '@/public/sse';

// GET请求示例
sseRequest('GET', '/api/sse-stream', { id: 1 }, (data, isEnd) => {
  console.log('收到数据:', data);
  if (isEnd) {
    console.log('SSE请求结束');
  }
});

// POST请求示例
sseRequest('POST', '/api/sse-stream', { query: 'hello' }, (data, isEnd) => {
  console.log('收到数据:', data);
  if (isEnd) {
    console.log('SSE请求结束');
  }
});
*/ 